package com.ayz.gateway.core.session.processor;


import com.ayz.gateway.common.result.GatewayResult;
import com.ayz.gateway.core.datasource.RpcStatement;
import com.ayz.gateway.core.session.GatewaySession;
import org.springframework.core.Ordered;

/**
 * @ClassName RpcPostProcessor
 * @Description TODO: 执行器执行一次RPC计划时，有前置和后置增强器两个拓展点
 * @Author 快乐的星球
 * @Date 2023/5/10 20:54
 * @Version 1.0
 **/
public interface RpcPostProcessor extends Ordered {
    /**
     * 前置增强器
     * @param gatewaySession 网关会话
     * @param rpcStatement   一次RPC执行计划
     * @return 是否要放行,只要任何一个前置处理器不通过，这次RPC执行计划就会被放弃
     */
    public boolean before(GatewaySession gatewaySession, RpcStatement rpcStatement)
    throws Exception;

    /**
     * 对RPC执行的结果进行处理
     * @param gatewaySession 网关会话
     * @param rpcStatement   RPC执行计划
     * @param gatewayResult  网关执行结果
     */
    public void after(GatewaySession gatewaySession, RpcStatement rpcStatement,
                      GatewayResult gatewayResult)
    throws Exception;
}
